package com.ruubypay.biz.mvc.api.service;

import com.ruubypay.biz.mvc.api.model.request.*;
import com.ruubypay.biz.mvc.api.model.response.OutGoingDetail;
import com.ruubypay.biz.mvc.api.model.response.ProcessDetails;
import com.ruubypay.web.common.page.DataGrid;

import java.io.IOException;
import java.util.List;

/**
 * 任务查询Service层接口
 * @author chenhaiyang
 */
public interface ProcessTaskService {

    /**
     * 根据用户信息分页查询queryTaskList
     * @param queryTaskList 查询请求vo类
     * @return 返回查询结果
     */
    DataGrid getUserTaskActive(QueryTask queryTaskList);

    /**
     * 根据用户信息查询已完成的任务
     * @param queryTaskList 查询实体
     * @return 返回已经完成的任务的列表
     */
    DataGrid getUserTaskFinisned(QueryTask queryTaskList);

    /**
     * 根据流程定义key发起流程
     * @param startProcess 发起流程请求VO类
     * @throws Exception 流程启动失败抛出异常
     */
    void startProcessBykey(StartProcess startProcess) throws Exception;

    /**
     * 签收任务
     * @param claimTask 签收任务实体
     * @throws Exception 签收失败异常
     */
    void claimTask(ClaimTask claimTask) throws Exception;

    /**
     * 根据任务Id提交任务
     * @param submitTask 提交任务请求类VO
     * @throws Exception 任务提交失败抛出异常
     */
    void sumbitTask(SubmitTask submitTask) throws Exception;

    /**
     * 查询流程跟踪信息
     * @param queryProcessInfo 查询流程跟踪信息VO类
     * @return 返回查询结果
     * @throws IOException 异常
     */
    ProcessDetails queryProcessInfo(QueryProcessInfo queryProcessInfo) throws IOException;

    /**
     * 获取当前的连线详情
     * @param queryOutGoingLines 连线查询对象
     * @return 返回所有工作流的连线信息
     */
    List<OutGoingDetail> getOutComingLines(QueryOutGoingLines queryOutGoingLines);

    /**
     * 将任务指派给他人
     * @param assignedTask 指派vo类
     */
    void assigneeTask(AssignedTask assignedTask);
}
